package code15.io;

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class Homework01 {
	
	public static void main(String[] args) {
		//copyFiles("E:/workspace/wbs22032/src", "E:/test1");
		
		copyFiles2("E:/workspace/wbs22032/src", "E:/test1");
	}

	/**
	 * 复制指定目录中的子文件(普通文件)到另一个指定目录中
	 * @param path 被复制的目录的路径
	 * @param destPath 复制到的目录的路径
	 */
	public static void copyFiles(String path, String destPath) {
		/*
		 * 例如: E:\workspace\wbs22032\src --> E:\
		 * 则在本示例中, 只有 a.properties、b.properties文件会被复制到 E盘根目录中
		 */
		File originFile = new File(path);
		File destFile = new File(destPath);
		if (originFile.isDirectory() && destFile.isDirectory()) {
			// 获取对应目录中的子文件
			File[] listFiles = originFile.listFiles(new FileFilter() {
				@Override
				public boolean accept(File f) {
					return f.isFile();
				}
			});
			for (File f : listFiles) {
				copyFile(f, new File(destFile, f.getName()));
			}
		}
	}
	/**
	 * 复制文件
	 * @param f
	 * @param file
	 */
	private static void copyFile(File originFile, File destFile) {
		try (
				FileInputStream fis = new FileInputStream(originFile);
				FileOutputStream fos = new FileOutputStream(destFile);
				) {
			byte[] buffer = new byte[1024];
			int len = -1;
			while ( ( len = fis.read(buffer) ) != -1 ) {
				fos.write(buffer, 0, len);
			}
			fos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 复制指定目录中的文件到另一个指定目录中
	 * @param path 被复制的目录的路径
	 * @param destPath 复制到的目录的路径
	 */
	public static void copyFiles2(String path, String destPath) {
		/*
		 * 例如: E:\workspace\wbs22032\src --> E:\
		 * 则在本示例中, 只有 a.properties、b.properties文件会被复制到 E盘根目录中
		 */
		File originFile = new File(path);
		File destFile = new File(destPath);
		if (originFile.isDirectory() && destFile.isDirectory()) {
			// 获取对应目录中的子文件
			File[] listFiles = originFile.listFiles();
			for (File f : listFiles) {
				// 当前原目录对应的目录的位置
				File dest = new File(destFile, f.getName());
				if (f.isDirectory()) {
					dest.mkdir();// 创建对应的目录结构
				}
				//System.out.println(f.getAbsolutePath());
				//System.out.println(dest.getAbsolutePath());
				//System.out.println("--------");
				copyFiles2(f.getAbsolutePath(), dest.getAbsolutePath());
			}
		}
		if(originFile.isFile()) {
			copyFile(originFile, destFile);
		}
	}
}
